
<!doctype html>
<html lang="en" class="no-js">
  <head>
    
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width,initial-scale=1">
      
        <meta name="description" content="Software Distribution and Building Platform for Windows">
      
      
      
      
        <link rel="canonical" href="https://www.msys2.org/docs/ci/">
      
      <link rel="icon" href="../../favicon.ico">
      <meta name="generator" content="mkdocs-1.2.2, mkdocs-material-7.2.6">
    
    
      
        <title>Using MSYS2 in CI - MSYS2</title>
      
    
    
      <link rel="stylesheet" href="../../assets/stylesheets/main.802231af.min.css">
      
        
        <link rel="stylesheet" href="../../assets/stylesheets/palette.3f5d1f46.min.css">
        
          
          
          <meta name="theme-color" content="#4051b5">
        
      
    
    
    
      
        
        <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
        <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CRoboto+Mono&display=fallback">
        <style>:root{--md-text-font-family:"Roboto";--md-code-font-family:"Roboto Mono"}</style>
      
    
    
    
      <link rel="stylesheet" href="../../stylesheets/extra.css">
    
    
      


    
    
   
  
    
  
<meta property="og:type" content="website" />
<meta property="og:title" content="MSYS2 - Using MSYS2 in CI" />
<meta property="og:description" content="There are many ways to use MSYS2 in CI. The recommended way is Github Actions." />

<meta property="og:url" content="https://www.msys2.org/docs/ci/" />
<meta property="og:image" content="https://www.msys2.org/logo.png" />
<meta property="og:image:type" content="image/png" />
<meta property="og:image:width" content="250" />
<meta property="og:image:height" content="250" />
<script type="application/ld+json">
  {
    "image": "https://www.msys2.org/logo.png",
    "@type": "WebSite",
    "headline": "MSYS2",
    "publisher": {
      "@type": "Organization",
      "logo": {
        "@type": "ImageObject",
        "url": "https://www.msys2.org/logo.png"
      }
    },
    "url": "https://www.msys2.org",
    "description": "Software Distribution and Building Platform for Windows",
    "name": "MSYS2",
    "@context": "https://schema.org"
  }
</script>

  </head>
  
  
    
    
    
    
    
    <body dir="ltr" data-md-color-scheme="" data-md-color-primary="indigo" data-md-color-accent="indigo">
  
    
    <script>function __prefix(e){return new URL("../..",location).pathname+"."+e}function __get(e,t=localStorage){return JSON.parse(t.getItem(__prefix(e)))}</script>
    
    <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
    <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
    <label class="md-overlay" for="__drawer"></label>
    <div data-md-component="skip">
      
        
        <a href="#using-msys2-in-ci" class="md-skip">
          Skip to content
        </a>
      
    </div>
    <div data-md-component="announce">
      
    </div>
    
      <header class="md-header" data-md-component="header">
  <nav class="md-header__inner md-grid" aria-label="Header">
    <a href="../.." title="MSYS2" class="md-header__button md-logo" aria-label="MSYS2" data-md-component="logo">
      
  <img src="../../logo.svg" alt="logo">

    </a>
    <label class="md-header__button md-icon" for="__drawer">
      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
    </label>
    <div class="md-header__title" data-md-component="header-title">
      <div class="md-header__ellipsis">
        <div class="md-header__topic">
          <span class="md-ellipsis">
            MSYS2
          </span>
        </div>
        <div class="md-header__topic" data-md-component="header-topic">
          <span class="md-ellipsis">
            
              Using MSYS2 in CI
            
          </span>
        </div>
      </div>
    </div>
    
    
    
      <label class="md-header__button md-icon" for="__search">
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
      </label>
      
<div class="md-search" data-md-component="search" role="dialog">
  <label class="md-search__overlay" for="__search"></label>
  <div class="md-search__inner" role="search">
    <form class="md-search__form" name="search">
      <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
      <label class="md-search__icon md-icon" for="__search">
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
      </label>
      <nav class="md-search__options" aria-label="Search">
        
        <button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
          <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
        </button>
      </nav>
      
    </form>
    <div class="md-search__output">
      <div class="md-search__scrollwrap" data-md-scrollfix>
        <div class="md-search-result" data-md-component="search-result">
          <div class="md-search-result__meta">
            Initializing search
          </div>
          <ol class="md-search-result__list"></ol>
        </div>
      </div>
    </div>
  </div>
</div>
    
    
      <div class="md-header__source">
        
<a href="https://github.com/msys2/msys2.github.io/" title="Go to repository" class="md-source" data-md-component="source">
  <div class="md-source__icon md-icon">
    
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
  </div>
  <div class="md-source__repository">
    GitHub
  </div>
</a>
      </div>
    
  </nav>
</header>
    
    <div class="md-container" data-md-component="container">
      
      
        
      
      <main class="md-main" data-md-component="main">
        <div class="md-main__inner md-grid">
          
            
              
              <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
                <div class="md-sidebar__scrollwrap">
                  <div class="md-sidebar__inner">
                    


<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
  <label class="md-nav__title" for="__drawer">
    <a href="../.." title="MSYS2" class="md-nav__button md-logo" aria-label="MSYS2" data-md-component="logo">
      
  <img src="../../logo.svg" alt="logo">

    </a>
    MSYS2
  </label>
  
    <div class="md-nav__source">
      
<a href="https://github.com/msys2/msys2.github.io/" title="Go to repository" class="md-source" data-md-component="source">
  <div class="md-source__icon md-icon">
    
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
  </div>
  <div class="md-source__repository">
    GitHub
  </div>
</a>
    </div>
  
  <ul class="md-nav__list" data-md-scrollfix>
    
      
      
      

  
  
  
    <li class="md-nav__item">
      <a href="../.." class="md-nav__link">
        Getting Started
      </a>
    </li>
  

    
      
      
      

  
  
  
    <li class="md-nav__item">
      <a href="../../news/" class="md-nav__link">
        News
      </a>
    </li>
  

    
      
      
      

  
  
  
    <li class="md-nav__item">
      <a href="https://packages.msys2.org" class="md-nav__link">
        Package Index
      </a>
    </li>
  

    
      
      
      

  
  
    
  
  
    
    <li class="md-nav__item md-nav__item--active md-nav__item--nested">
      
      
        <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4" type="checkbox" id="__nav_4" checked>
      
      <label class="md-nav__link" for="__nav_4">
        Documentation
        <span class="md-nav__icon md-icon"></span>
      </label>
      <nav class="md-nav" aria-label="Documentation" data-md-level="1">
        <label class="md-nav__title" for="__nav_4">
          <span class="md-nav__icon md-icon"></span>
          Documentation
        </label>
        <ul class="md-nav__list" data-md-scrollfix>
          
            
  
  
  
    <li class="md-nav__item">
      <a href="../what-is-msys2/" class="md-nav__link">
        What is MSYS2?
      </a>
    </li>
  

          
            
  
  
  
    <li class="md-nav__item">
      <a href="../who-is-using-msys2/" class="md-nav__link">
        Who Is Using MSYS2?
      </a>
    </li>
  

          
            
  
  
  
    <li class="md-nav__item">
      <a href="../environments/" class="md-nav__link">
        Environments
      </a>
    </li>
  

          
            
  
  
    
  
  
    <li class="md-nav__item md-nav__item--active">
      
      <input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
      
      
        
      
      
        <label class="md-nav__link md-nav__link--active" for="__toc">
          Using MSYS2 in CI
          <span class="md-nav__icon md-icon"></span>
        </label>
      
      <a href="./" class="md-nav__link md-nav__link--active">
        Using MSYS2 in CI
      </a>
      
        
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
  
  
  
    
  
  
    <label class="md-nav__title" for="__toc">
      <span class="md-nav__icon md-icon"></span>
      Table of contents
    </label>
    <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
      
        <li class="md-nav__item">
  <a href="#github-actions-recommended" class="md-nav__link">
    Github Actions (recommended)
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#appveyor" class="md-nav__link">
    Appveyor
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#docker" class="md-nav__link">
    Docker
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#other-systems" class="md-nav__link">
    Other Systems
  </a>
  
</li>
      
    </ul>
  
</nav>
      
    </li>
  

          
            
  
  
  
    <li class="md-nav__item">
      <a href="../terminals/" class="md-nav__link">
        Terminals
      </a>
    </li>
  

          
            
  
  
  
    <li class="md-nav__item">
      <a href="../package-management/" class="md-nav__link">
        Package Management
      </a>
    </li>
  

          
            
  
  
  
    <li class="md-nav__item">
      <a href="../filesystem-paths/" class="md-nav__link">
        Filesystem Paths
      </a>
    </li>
  

          
        </ul>
      </nav>
    </li>
  

    
      
      
      

  
  
  
    
    <li class="md-nav__item md-nav__item--nested">
      
      
        <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_5" type="checkbox" id="__nav_5" >
      
      <label class="md-nav__link" for="__nav_5">
        Development
        <span class="md-nav__icon md-icon"></span>
      </label>
      <nav class="md-nav" aria-label="Development" data-md-level="1">
        <label class="md-nav__title" for="__nav_5">
          <span class="md-nav__icon md-icon"></span>
          Development
        </label>
        <ul class="md-nav__list" data-md-scrollfix>
          
            
  
  
  
    <li class="md-nav__item">
      <a href="../../dev/mirrors/" class="md-nav__link">
        Mirrors
      </a>
    </li>
  

          
            
  
  
  
    <li class="md-nav__item">
      <a href="../../dev/keyring/" class="md-nav__link">
        MSYS2 Keyring
      </a>
    </li>
  

          
            
  
  
  
    <li class="md-nav__item">
      <a href="../../dev/python/" class="md-nav__link">
        Python
      </a>
    </li>
  

          
        </ul>
      </nav>
    </li>
  

    
      
      
      

  
  
  
    
    <li class="md-nav__item md-nav__item--nested">
      
      
        <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6" type="checkbox" id="__nav_6" >
      
      <label class="md-nav__link" for="__nav_6">
        Other Topics
        <span class="md-nav__icon md-icon"></span>
      </label>
      <nav class="md-nav" aria-label="Other Topics" data-md-level="1">
        <label class="md-nav__title" for="__nav_6">
          <span class="md-nav__icon md-icon"></span>
          Other Topics
        </label>
        <ul class="md-nav__list" data-md-scrollfix>
          
            
  
  
  
    <li class="md-nav__item">
      <a href="../../wiki/Home/" class="md-nav__link">
        Welcome to the MSYS2 wiki
      </a>
    </li>
  

          
            
  
  
  
    <li class="md-nav__item">
      <a href="../../wiki/Contributing-to-MSYS2/" class="md-nav__link">
        Contributing to MSYS2
      </a>
    </li>
  

          
            
  
  
  
    <li class="md-nav__item">
      <a href="../../wiki/Creating-Packages/" class="md-nav__link">
        Creating Packages
      </a>
    </li>
  

          
            
  
  
  
    <li class="md-nav__item">
      <a href="../../wiki/Devtopics/" class="md-nav__link">
        TODO LIST
      </a>
    </li>
  

          
            
  
  
  
    <li class="md-nav__item">
      <a href="../../wiki/Distributing/" class="md-nav__link">
        Distributing
      </a>
    </li>
  

          
            
  
  
  
    <li class="md-nav__item">
      <a href="../../wiki/FAQ/" class="md-nav__link">
        FAQ
      </a>
    </li>
  

          
            
  
  
  
    <li class="md-nav__item">
      <a href="../../wiki/GDB-qtcreator/" class="md-nav__link">
        Qt Creator
      </a>
    </li>
  

          
            
  
  
  
    <li class="md-nav__item">
      <a href="../../wiki/History/" class="md-nav__link">
        MSYS2 History
      </a>
    </li>
  

          
            
  
  
  
    <li class="md-nav__item">
      <a href="../../wiki/How-does-MSYS2-differ-from-Cygwin/" class="md-nav__link">
        How does MSYS2 differ from Cygwin?
      </a>
    </li>
  

          
            
  
  
  
    <li class="md-nav__item">
      <a href="../../wiki/Launchers/" class="md-nav__link">
        Launchers
      </a>
    </li>
  

          
            
  
  
  
    <li class="md-nav__item">
      <a href="../../wiki/MSYS2-installation/" class="md-nav__link">
        MSYS2-Installation
      </a>
    </li>
  

          
            
  
  
  
    <li class="md-nav__item">
      <a href="../../wiki/MSYS2-introduction/" class="md-nav__link">
        MSYS2-Introduction
      </a>
    </li>
  

          
            
  
  
  
    <li class="md-nav__item">
      <a href="../../wiki/MSYS2-reinstallation/" class="md-nav__link">
        Re-installing MSYS2
      </a>
    </li>
  

          
            
  
  
  
    <li class="md-nav__item">
      <a href="../../wiki/Packages/" class="md-nav__link">
        Packages List
      </a>
    </li>
  

          
            
  
  
  
    <li class="md-nav__item">
      <a href="../../wiki/Porting/" class="md-nav__link">
        Porting
      </a>
    </li>
  

          
            
  
  
  
    <li class="md-nav__item">
      <a href="../../wiki/Setting-up-SSHd/" class="md-nav__link">
        Setting up SSHd
      </a>
    </li>
  

          
            
  
  
  
    <li class="md-nav__item">
      <a href="../../wiki/Signing-packages/" class="md-nav__link">
        Signing Packages
      </a>
    </li>
  

          
            
  
  
  
    <li class="md-nav__item">
      <a href="../../wiki/Sudo/" class="md-nav__link">
        Do you need Sudo?
      </a>
    </li>
  

          
            
  
  
  
    <li class="md-nav__item">
      <a href="../../wiki/Terminals/" class="md-nav__link">
        Terminals
      </a>
    </li>
  

          
            
  
  
  
    <li class="md-nav__item">
      <a href="../../wiki/JIT-Debugging/" class="md-nav__link">
        Just-in-time Debugging
      </a>
    </li>
  

          
        </ul>
      </nav>
    </li>
  

    
      
      
      

  
  
  
    <li class="md-nav__item">
      <a href="../../contact/" class="md-nav__link">
        Support & Contact
      </a>
    </li>
  

    
      
      
      

  
  
  
    <li class="md-nav__item">
      <a href="../../codeofconduct/" class="md-nav__link">
        Code of Conduct
      </a>
    </li>
  

    
  </ul>
</nav>
                  </div>
                </div>
              </div>
            
            
              
              <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
                <div class="md-sidebar__scrollwrap">
                  <div class="md-sidebar__inner">
                    
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
  
  
  
    
  
  
    <label class="md-nav__title" for="__toc">
      <span class="md-nav__icon md-icon"></span>
      Table of contents
    </label>
    <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
      
        <li class="md-nav__item">
  <a href="#github-actions-recommended" class="md-nav__link">
    Github Actions (recommended)
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#appveyor" class="md-nav__link">
    Appveyor
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#docker" class="md-nav__link">
    Docker
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#other-systems" class="md-nav__link">
    Other Systems
  </a>
  
</li>
      
    </ul>
  
</nav>
                  </div>
                </div>
              </div>
            
          
          <div class="md-content" data-md-component="content">
            <article class="md-content__inner md-typeset">
              
                
                  <a href="https://github.com/msys2/msys2.github.io/edit/source/web/docs/ci.md" title="Edit this page" class="md-content__button md-icon">
                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg>
                  </a>
                
                
                <h1 id="using-msys2-in-ci">Using MSYS2 in CI</h1>
<h2 id="github-actions-recommended">Github Actions (recommended)</h2>
<p>Assuming you use GitHub this is the easiest way to get going. We provide a
GitHub Action which handles everything from installing the latest MSYS2,
updating it and installing all the packages you need. All you have to do is to
provide a BASH script that runs your code in the MSYS2 environment.</p>
<p>1) Create a workflow file, see <a href="https://docs.github.com/en/actions/configuring-and-managing-workflows/configuring-a-workflow#creating-a-workflow-file">the GitHub docs for details</a></p>
<p>2) Paste the following into your workflow file:</p>
<div class="highlight"><pre><span></span><code><span class="nt">name</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">Hello World</span>
<span class="nt">on</span><span class="p">:</span> <span class="p p-Indicator">[</span><span class="nv">push</span><span class="p p-Indicator">,</span> <span class="nv">pull_request</span><span class="p p-Indicator">]</span>

<span class="nt">jobs</span><span class="p">:</span>
  <span class="nt">build</span><span class="p">:</span>
    <span class="nt">runs-on</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">windows-latest</span>
    <span class="nt">defaults</span><span class="p">:</span>
      <span class="nt">run</span><span class="p">:</span>
        <span class="nt">shell</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">msys2 {0}</span>
    <span class="nt">steps</span><span class="p">:</span>
      <span class="p p-Indicator">-</span> <span class="nt">uses</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">actions/checkout@v2</span>
      <span class="p p-Indicator">-</span> <span class="nt">uses</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">msys2/setup-msys2@v2</span>
        <span class="nt">with</span><span class="p">:</span>
          <span class="nt">msystem</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">MINGW64</span>
          <span class="nt">update</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">true</span>
          <span class="nt">install</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">git mingw-w64-x86_64-toolchain</span>
      <span class="p p-Indicator">-</span> <span class="nt">name</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">CI-Build</span>
        <span class="nt">run</span><span class="p">:</span> <span class="p p-Indicator">|</span>
          <span class="no">echo &#39;Running in MSYS2!&#39;</span>
          <span class="no">./ci-build.sh</span>
</code></pre></div>
<p>For more details on the 'msys2/setup-msys2' action and all the available options
see <a href="https://github.com/marketplace/actions/setup-msys2">https://github.com/marketplace/actions/setup-msys2</a></p>
<h2 id="appveyor">Appveyor</h2>
<p>Appveyor provides a MSYS2 installation on all their images under <code>C:\msys64</code>,
see <a href="https://www.appveyor.com/docs/windows-images-software/">https://www.appveyor.com/docs/windows-images-software/</a></p>
<p>In case you want to update the MSYS2 installation and install packages you need
to update MSYS2 first. For this you need to run the following commands:</p>
<div class="highlight"><pre><span></span><code><span class="c"># Update MSYS2</span>
<span class="n">C</span><span class="p">:\</span><span class="n">msys64</span><span class="p">\</span><span class="n">usr</span><span class="p">\</span><span class="n">bin</span><span class="p">\</span><span class="n">bash</span> <span class="n">-lc</span> <span class="s2">&quot;pacman --noconfirm -Syuu&quot;</span>  <span class="c"># Core update (in case any core packages are outdated)</span>
<span class="n">C</span><span class="p">:\</span><span class="n">msys64</span><span class="p">\</span><span class="n">usr</span><span class="p">\</span><span class="n">bin</span><span class="p">\</span><span class="n">bash</span> <span class="n">-lc</span> <span class="s2">&quot;pacman --noconfirm -Syuu&quot;</span>  <span class="c"># Normal update</span>

<span class="c"># Then run your code</span>
<span class="nv">$env:CHERE_INVOKING</span> <span class="p">=</span> <span class="s1">&#39;yes&#39;</span>  <span class="c"># Preserve the current working directory</span>
<span class="nv">$env:MSYSTEM</span> <span class="p">=</span> <span class="s1">&#39;MINGW64&#39;</span>  <span class="c"># Start a 64 bit Mingw environment</span>
<span class="n">C</span><span class="p">:\</span><span class="n">msys64</span><span class="p">\</span><span class="n">usr</span><span class="p">\</span><span class="n">bin</span><span class="p">\</span><span class="n">bash</span> <span class="n">-lc</span> <span class="s2">&quot;./ci-build.sh&quot;</span>
</code></pre></div>
<h2 id="docker">Docker</h2>
<p>Install MSYS2 under <code>C:\msys64</code> into a Windows based Docker image:</p>
<div class="highlight"><pre><span></span><code><span class="c"># select as base image matching your host to get process isolation</span>
<span class="k">FROM</span> <span class="s">mcr.microsoft.com/windows/servercore:2004</span>

<span class="k">SHELL</span> <span class="p">[</span><span class="s2">&quot;powershell&quot;</span><span class="p">,</span> <span class="s2">&quot;-Command&quot;</span><span class="p">,</span> <span class="s2">&quot;$ErrorActionPreference = &#39;Stop&#39;; $ProgressPreference = &#39;SilentlyContinue&#39;;&quot;</span><span class="p">]</span>

<span class="k">RUN</span> <span class="o">[</span>Net.ServicePointManager<span class="o">]</span>::SecurityProtocol <span class="o">=</span> <span class="o">[</span>Net.SecurityProtocolType<span class="o">]</span>::Tls12<span class="p">;</span> <span class="se">\</span>
  Invoke-WebRequest -UseBasicParsing -uri <span class="s2">&quot;https://github.com/msys2/msys2-installer/releases/download/nightly-x86_64/msys2-base-x86_64-latest.sfx.exe&quot;</span> -OutFile msys2.exe<span class="p">;</span> <span class="se">\</span>
  .<span class="se">\m</span>sys2.exe -y -oC:<span class="se">\;</span> <span class="se">\</span>
  Remove-Item msys2.exe <span class="p">;</span> <span class="se">\</span>
  <span class="k">function</span> msys<span class="o">()</span> <span class="o">{</span> C:<span class="se">\m</span>sys64<span class="se">\u</span>sr<span class="se">\b</span>in<span class="se">\b</span>ash.exe @<span class="o">(</span><span class="s1">&#39;-lc&#39;</span><span class="o">)</span> + @Args<span class="p">;</span> <span class="o">}</span> <span class="se">\</span>
  msys <span class="s1">&#39; &#39;</span><span class="p">;</span> <span class="se">\</span>
  msys <span class="s1">&#39;pacman --noconfirm -Syuu&#39;</span><span class="p">;</span> <span class="se">\</span>
  msys <span class="s1">&#39;pacman --noconfirm -Syuu&#39;</span><span class="p">;</span> <span class="se">\</span>
  msys <span class="s1">&#39;pacman --noconfirm -Scc&#39;</span><span class="p">;</span>
</code></pre></div>
<h2 id="other-systems">Other Systems</h2>
<p>On systems that don't provide MSYS2 integration you need to install and update
MSYS2 yourself.</p>
<p>1) Download and install MSYS2. For CI systems we provide a self extracting 
   archive, so you don't need any additional tools.</p>
<div class="highlight"><pre><span></span><code><span class="c"># Download the archive</span>
<span class="p">(</span><span class="nb">New-Object</span> <span class="n">System</span><span class="p">.</span><span class="n">Net</span><span class="p">.</span><span class="n">WebClient</span><span class="p">).</span><span class="n">DownloadFile</span><span class="p">(</span><span class="s1">&#39;https://github.com/msys2/msys2-installer/releases/download/nightly-x86_64/msys2-base-x86_64-latest.sfx.exe&#39;</span><span class="p">,</span> <span class="s1">&#39;msys2.exe&#39;</span><span class="p">)</span>
<span class="p">.\</span><span class="n">msys2</span><span class="p">.</span><span class="n">exe</span> <span class="n">-y</span> <span class="n">-oC</span><span class="p">:\</span>  <span class="c"># Extract to C:\msys64</span>
<span class="nb">Remove-Item</span> <span class="n">msys2</span><span class="p">.</span><span class="n">exe</span>  <span class="c"># Delete the archive again</span>
</code></pre></div>
<p>2) Run MSYS2 for the first time and update it</p>
<div class="highlight"><pre><span></span><code><span class="c"># Run for the first time</span>
<span class="n">C</span><span class="p">:\</span><span class="n">msys64</span><span class="p">\</span><span class="n">usr</span><span class="p">\</span><span class="n">bin</span><span class="p">\</span><span class="n">bash</span> <span class="n">-lc</span> <span class="s1">&#39; &#39;</span>
<span class="c"># Update MSYS2</span>
<span class="n">C</span><span class="p">:\</span><span class="n">msys64</span><span class="p">\</span><span class="n">usr</span><span class="p">\</span><span class="n">bin</span><span class="p">\</span><span class="n">bash</span> <span class="n">-lc</span> <span class="s1">&#39;pacman --noconfirm -Syuu&#39;</span>  <span class="c"># Core update (in case any core packages are outdated)</span>
<span class="n">C</span><span class="p">:\</span><span class="n">msys64</span><span class="p">\</span><span class="n">usr</span><span class="p">\</span><span class="n">bin</span><span class="p">\</span><span class="n">bash</span> <span class="n">-lc</span> <span class="s1">&#39;pacman --noconfirm -Syuu&#39;</span>  <span class="c"># Normal update</span>
</code></pre></div>
<p>3) Run your code (<code>ci-build.sh</code> in this case)</p>
<div class="highlight"><pre><span></span><code><span class="nv">$env:CHERE_INVOKING</span> <span class="p">=</span> <span class="s1">&#39;yes&#39;</span>  <span class="c"># Preserve the current working directory</span>
<span class="nv">$env:MSYSTEM</span> <span class="p">=</span> <span class="s1">&#39;MINGW64&#39;</span>  <span class="c"># Start a 64 bit Mingw environment</span>
<span class="n">C</span><span class="p">:\</span><span class="n">msys64</span><span class="p">\</span><span class="n">usr</span><span class="p">\</span><span class="n">bin</span><span class="p">\</span><span class="n">bash</span> <span class="n">-lc</span> <span class="s1">&#39;./ci-build.sh&#39;</span>
</code></pre></div>
<p>4) End all processes that might have been started by the MSYS2 update/setup</p>
<p>In some cases CI systems will wait until all processes you have started have
also ended, but the MSYS2 setup and update might spawn processes for gnupg etc.
that will stay around in the background forever. To end them all you can run:</p>
<div class="highlight"><pre><span></span><code><span class="n">taskkill</span> <span class="p">/</span><span class="n">F</span> <span class="p">/</span><span class="n">FI</span> <span class="s2">&quot;MODULES eq msys-2.0.dll&quot;</span>
</code></pre></div>
                
                  
                
              
              
                


              
            </article>
          </div>
        </div>
        
      </main>
      
        
<footer class="md-footer">
  
    <nav class="md-footer__inner md-grid" aria-label="Footer">
      
        
        <a href="../environments/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Environments" rel="prev">
          <div class="md-footer__button md-icon">
            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
          </div>
          <div class="md-footer__title">
            <div class="md-ellipsis">
              <span class="md-footer__direction">
                Previous
              </span>
              Environments
            </div>
          </div>
        </a>
      
      
        
        <a href="../terminals/" class="md-footer__link md-footer__link--next" aria-label="Next: Terminals" rel="next">
          <div class="md-footer__title">
            <div class="md-ellipsis">
              <span class="md-footer__direction">
                Next
              </span>
              Terminals
            </div>
          </div>
          <div class="md-footer__button md-icon">
            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
          </div>
        </a>
      
    </nav>
  
  <div class="md-footer-meta md-typeset">
    <div class="md-footer-meta__inner md-grid">
      <div class="md-footer-copyright">
        
        Made with
        <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
          Material for MkDocs
        </a>
        
      </div>
      
  <div class="md-footer-social">
    
      
      
        
        
      
      <a href="https://github.com/msys2" target="_blank" rel="noopener" title="github.com" class="md-footer-social__link">
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
      </a>
    
      
      
        
        
      
      <a href="https://gitter.im/msys2/msys2" target="_blank" rel="noopener" title="gitter.im" class="md-footer-social__link">
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><path d="M66.4 322.5H16V0h50.4v322.5zM166.9 76.1h-50.4V512h50.4V76.1zm100.6 0h-50.4V512h50.4V76.1zM368 76h-50.4v247H368V76z"/></svg>
      </a>
    
      
      
        
        
      
      <a href="https://twitter.com/msys2org" target="_blank" rel="noopener" title="twitter.com" class="md-footer-social__link">
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg>
      </a>
    
  </div>

    </div>
  </div>
</footer>
      
    </div>
    <div class="md-dialog" data-md-component="dialog">
      <div class="md-dialog__inner md-typeset"></div>
    </div>
    <script id="__config" type="application/json">{"base": "../..", "features": ["navigation.instant"], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing", "select.version.title": "Select version"}, "search": "../../assets/javascripts/workers/search.409db549.min.js", "version": null}</script>
    
    
      <script src="../../assets/javascripts/bundle.756773cc.min.js"></script>
      
    
  </body>
</html>